package main

import "fmt"

func main()  {
	a := 1
	fmt.Printf("test2函数调用前：a的值是：%d,a的地址是：%p\n", a,&a)
	test2(a) //
	fmt.Printf("test2函数调用后：a的值是：%d,a的地址是：%p\n", a,&a)
	test3(&a)
	fmt.Printf("test3函数调用后：a的值是：%d,a的地址是：%p\n", a,&a)
	fmt.Println("------------------")
	arr1:=[4]int{5, 6, 7, 8}
	fmt.Printf("test4函数调用前：数组的地址:%p，数组的值：%v\n",&arr1,arr1)
	test4(arr1)
	fmt.Printf("test4函数调用后：数组的地址:%p，数组的值：%v\n",&arr1,arr1)

	fmt.Println("-----------------")
	test5(&arr1)
	fmt.Printf("test5函数调用后：数组的地址:%p，数组的值：%v\n",&arr1,arr1)
}

func test2(m int)  { // m = a,传递的是数据本身
	fmt.Printf("函数中m的数值是：%d,m的地址是：%p\n",m, &m)
	m = 100
	fmt.Printf("函数中m的数值是：%d,m的地址是：%p\n",m, &m)
}
//参数是指针
func test3(n *int){ // n=&a,将a的地址，赋值给n
	fmt.Printf("%p,%p，%d\n",&n,n,*n) //n的地址，n的数据：a的地址，a的数据
	*n = 1000
	fmt.Printf("%p,%p，%d\n",&n,n,*n)
}

func test4(arr [4]int){// arr= arr1,传的是数组中的数据
	arr[0]= 10
	fmt.Printf("arr的的地址：%p, arr的数值：%v\n",&arr,arr)
}

func test5(p1 *[4]int){ // p1=&arr1
	fmt.Printf("%p,%p\n",&p1,p1)//p1自己的地址，p1中存储的数组的地址，就是arr1的地址
	(*p1)[0] = 100
}

/*
定义一个函数，接收一个切片作为参数

 */